button: Fix in_button checks
authorTimm Bäder <mail@baedert.org>
Sat, 17 Jun 2017 07:27:03 +0000 (09:27 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 20 Jul 2017 01:27:14 +0000 (21:27 -0400)
The gesture coords are relative to the button's origin, so use
gtk_widget_get_own_allocation to check if the coords are inside the
button.

gtk/gtkbutton.c

index 5432c49be8b0867444b86f95d8714f6667fa7509..01593226bed37d90a72d3918b7c584fbb305f365 100644 (file)
@@ -330,12 +330,11 @@ touch_release_in_button (GtkButton *button)
     }
 
   gdk_event_get_coords (event, &x, &y);
-  gtk_widget_get_allocation (GTK_WIDGET (button), &allocation);
+  gtk_widget_get_own_allocation (GTK_WIDGET (button), &allocation);
 
   gdk_event_free (event);
 
-  if (x >= 0 && x <= allocation.width &&
-      y >= 0 && y <= allocation.height)
+  if (gdk_rectangle_contains_point (&allocation, x, y))
     return TRUE;
 
   return FALSE;
@@ -379,10 +378,10 @@ multipress_gesture_update_cb (GtkGesture       *gesture,
   if (sequence != gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture)))
     return;
 
-  gtk_widget_get_allocation (GTK_WIDGET (button), &allocation);
+  gtk_widget_get_own_allocation (GTK_WIDGET (button), &allocation);
   gtk_gesture_get_point (gesture, sequence, &x, &y);
 
-  in_button = (x >= 0 && y >= 0 && x < allocation.width && y < allocation.height);
+  in_button = gdk_rectangle_contains_point (&allocation, x, y);
 
   if (priv->in_button != in_button)
     {